Skip to main content

トリガーの例 1: 簡単な例

Robotics_Trigger.project ここで説明するサンプル プロジェクトは、次のインストール ディレクトリにあります。 CODESYS..\CODESYS SoftMotion\Examples

トリガは、軸グループが指令されたパス上の特定の点にいつ到達するかを正確に知るために使用されます。この情報は、たとえば、正確なタイミングでツールをオンまたはオフにするために使用できます。この例では、単一のトリガーが動作でどのように指令され、周期的に読み取られるかを示します。これに基づいて、 トリガー例2:接着工程 プロジェクトは現実的なサンプル アプリケーションを示しています。

アプリケーションの構造

このアプリケーションは2つのプログラムで構成されています。 Main_PRG バスタスクで実行され、 Planning_PRG 軸グループ計画タスクで実行されています。また、トレースもあります。

メイン_PRG:

Main_PRG プログラムにはアプリケーションのメイン ステート マシンが含まれています。最初の 2 つの状態は、ドライブと軸グループを初期化し、スイッチをオンにするために使用されます。の中に STATE_COMMAND_MOVEMENT_WITH_TRIGGER 状態では、まずインスタンスを使用してトリガーが準備されます。 SMC_GroupPrepareTrigger ファンクションブロック。位置は 0.6 の値で相対的に指定されます。その結果、割り当てられた動作の 60% が完了した時点でトリガーが配置されます。準備されたトリガーは、次のコマンド動作に割り当てられます。この例では、位置 (X=20、Y=10) への直線移動がコマンドによって命令されます。 MC_MoveLinearAbsolute

prepTrigger.PositionType := SMC_TriggerPositionType.MvtRelative;
prepTrigger.Position.MvtPosition := 0.6;
prepTrigger(AxisGroup:= AxisGroup, Execute:= TRUE);
 
moveLinear(AxisGroup:= AxisGroup, Execute:= prepTrigger.Prepared);

次の状態では STATE_ENABLE_READ_TRIGGER、のインスタンス SMC_GroupReadTrigger コマンドされたトリガーの状態を読み取るために開始されます。トリガーへのリンクは、 TriggerId によって返されました SMC_GroupPrepareTrigger

readTrigger.TriggerId := prepTrigger.TriggerId;
readTrigger.Enable := TRUE;

の中に STATE_CHECK_TRIGGER 状態に応じて、トリガーのステータスが最終的に周期的にチェックされます。出来るだけ早く SMC_GroupReadTrigger レポート Active ステータスとして、トリガーに達するまでの時間を読み取ることができます。期間は常に現在のサイクルの開始を指します。したがって、継続時間がサイクル時間 (この例では 0.004 秒) より短い場合、現在のサイクルでトリガーに達します。

IF readTrigger.TriggerInfo.status = SMC_TRIGGER_STATUS.Active THEN
    IF readTrigger.TriggerInfo.triggerTime <= 0.004 THEN
        triggerFired := TRUE;
        ...
    END_IF
END_IF

企画_PRG

の中に Planning_PRG プログラムでは、計画の予測期間は、 SMC_TuneCPKernel ファンクションブロック。の SMC_GroupReadTrigger ファンクションブロックは、トリガーが予測期間に達したときに出力できます。この例では、予測期間は 0.1 秒に設定されています。したがって、のステータスは、 SMC_GroupReadTrigger ファンクションブロックは次のように変わります Active 軸グループがトリガに到達する 0.1 秒前から有効期間を出力します。

tuneCpKernel(AxisGroup:= axisGroup, Execute:= TRUE, fPlanningForecastDuration:= 0.1);

痕跡

トレースを使用して、 SMC_GroupReadTrigger ファンクションブロック。

最初の図では、(X=0, Y=0) から (X=20, Y=10) まで移動が実行されることがわかります。トリガーはムーブメント上の相対位置 0.6、つまり (X=12、Y=6) にあります。

2 番目の図は、 triggerTime からの出力 SMC_GroupReadTrigger。計画の予測期間が 0.1 秒であるため、値は 0.1 秒にジャンプし、その後、位置 (X=12、Y=6) で値 0 に達するまで直線的に減少します。

3 番目の図は、 triggerFired に設定される変数 STATE_CHECK_TRIGGER の状態 Main_PRG 軸グループがトリガから 0.004 秒未満の距離に近づくとすぐに実行されます。